from PyQt5 import QtCore, QtGui, QtWidgets
import sys

from PyQt5.QtGui import QPixmap

import lal
import asyncio
from bleak import BleakClient, BleakScanner
from bleak.backends.characteristic import BleakGATTCharacteristic
from lal import Ui_MainWindow
from PyQt5 import QtWidgets

import time

#设备的Characteristic UUID（具备写属性Write）
par_write_characteristic="0000fff1-0000-1000-8000-00805f9b34fb"
#设备的Characteristic UUID
par_notification_characteristic="0000fff1-0000-1000-8000-00805f9b34fb"


par_device_addr="20:22:03:22:0C:80"


IsBleDevice = 0     #能否扫描到设备
send_buff = ''      #发送数据缓冲区
Receive_buff = ''   #接收数据缓冲区
IsREC_HEX  = 0      #是否十六进制接收
IsSEND_HEX  = 0     #是否十六进制发送
IsSEND_HHF  = 0     #是否十六进制发送

image = b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x01\x90\x00\x00\x01\x90\x08\x06\x00\x00\x00\x80\xbf6\xcc\x00\x00\x0ecIDATx\xda\xed\xdd1\x8e\x1aK\x14\x86Q\xb6C\x82\x04\t\xec\x99\x98\x00\x11\x10\x12\xb0\x05vB\xd0\x16#9\xb44\xb6\xdc5u\xff{>\x89\xb4\x1fTW\xdd\x83\x9f\xd4\xc3f\x91$\xe9\x1f\xdaX\x02I\x12@$I\x00\x91$\x01D\x92\x04\x10I\x92\x00"I\x02\x88$\t \x92$\x80H\x92\x00"I\x12@$I\x00\x91$\x01D\x92\x04\x10I\x12@$I\x02\x88$\t \x92$\x80H\x92\x00"I\x02\x88$I\x00\x91$\x01D\x92\x04\x10I\x12@$I\x00\x91$\t \x92$\x80H\x92\x00"I\x02\x88$\t \x92$\x01D\x92\x04\x10I\x12@\xfe\xf0&6\x9b\xb6\xaf\x91kX\xf1\xbf5\xf2\xfd\xd8c\xee\x97\xfb\n\x10\x80\x00\xc4@\x02\x88\xd9\x01\x10\x9b\x00 \x06\x12@\xcc\r\x80\xd8\x08\x001\x90\x00\xe2~\x01\x04 \x00\x01\x88A\xe3~\xb9\xaf\x00\x01\x08@\x00\xe2~\xb9\xaf\x00\x01\x08@\x0c$\x80\x98\x1d\x00\xb1\t\x00b \x01\xc4\xdc\x00\x88\x8d\x00\x10\x03\t \xee\x17@&\xdfP\xa9\x07\xa5\xf3\xc1\x1d\xf9~*\xee\x9f\xd4\xcf\xdeynT\xfal\x00\x01\x08@\x00\xe2|\xf9l\x00\xb1\t\x00\x02\x10\x80\x00\x04 68@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\xcc\r\x80\xd8\x08\x00\x01\x08@\x9c/\x9f\r \x00\x01\x08@\x9c/\x9f\r 6\x01@\x00\x02\x10\x80\x00\xc4\x06\x07\x08@\x00\x02\x10\x80\x0c_\xac\xd7\xeb\xb5\xec\xf7\xfbU\x0f\xdav\xbb].\x97\xcbt\x03{\xb6A\x9b\x8aL\xe7\xa7\x9aS\xff\xfa\xc2\x88\xb9\xf1S\xb3\x03 \x7f\xb1X#6\xc1\xe7u8\x1c\x96\xc7\xe3\x01\x10\x80\x00$\x00\x90Qs\xe3\'f\x07@&\x1d\x12\xf7\xfb\x1d \x00\x01H\x00 \xa3\xd7z\xe4\xec\x00\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \xed\x00\x99\xad\xd9\x06m*\xf8\xe6\x06@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x18\xc6\xd3>E=\xf2:\xdd\x87h"\xd4\x00\x01\x08@\x0c\x1b\x80\xb8\xa7f\x07@l\x02\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x86\r@\x00\x02\x10\x80\x00\x04 \x00qO\xcd\x8e\xc6\x80\xecv\xbb!\x1b\xe0x<.\xb7\xdb\r \x86\r@\x02\xee\xe9\xa8\xb9\x918;\xa2\x00\xb9^\xaf\xcb\xe9tZ}\x03\x9c\xcf\xe7\xe5\xfd~\x03\x04 \x00\t\xb8\xa7#\xe6F\xea\xec\x88\x02\xe4\xd3\xf3\xf9\xfc\xfa\'\xe2Z\xaf\xcf\xb7\x87\xefl\x00\x80@f\x96\x9fuM\xfd\x0b\x04\x95\xe6F\xea\xec\x88\x03$u\x83\x03\x04 \x00\xe9q\xbe\x00b#\x00\x04 \x00q\xbe\x00b\xb1|.\x80\x00\x04 >\x1b@|.\x80\x00\x04 f\x07@l\x02\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x808_\x00\xb1\x11|.\x80\x00\xc4\xf9\x02\x88\xc5\xf2\xb9\x00\x02\x10\x80\xf8l\t\x80\xa4\xbe*\x0e6\xd7q\x9d\x8e\x7f\xc3\xaa\xe2\xec\x00\x88M\xe0:\xae\xe3:\xe6\x06@l\x04\x03\xc0u\\\x07 \x00\x01\x08@\\\xc7u\x00\x02\x10\x80\x00\xc4u\\\x07 \x00\x01\x08@\\\xc7u\\\xc7\xec\x00\x88M`\x00\xb8\x8e\xeb\x98\x1b\x00\xb1\x11\x0c\x00\xd7q\x1d\x80\x00\x04 \x00q\x1d\xd7\x01\x08@\xa6\x01Dyu~\x1a;\xf5\xa9\xee\xe4\'\xbf\x05\x10\x01\x04 \x00\x11@\x04\x10\x80\x00D\x00\x11@\x00\x02\x10\x01D\x02\x08@\x00"\x80\x08 \x00\x01\x88\x00"\x80\x00\x04 \x02\x88\x00\x02\x10\x80\x08 \x02\x08@\x00"\x804\x1bl\xb3=);\xdb\x10\xad\x88C\xc5\xc1\xdfy\x1f\x02\x16 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01H\xcc\xb0\xe9\xfcS\x9a\x15\xdfO\xc5\xebt^\x1f\x7f\xa5\x00 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \xce\x0e@\x00\xe2\x10\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00qv\x002\t \x9d\x07d\xc55L=(\xa9\xfb\xb03\xf8\xa9\xe8\x01\x04 \x00\x01\x08@\x00\x02\x10\x07\x17 \x00\x01\x08@\x00\xe2\xe0\x02\x04 \x00\x01\x08@\x00\x02\x10\x80\xd8\x87\x00\x01\x08@\x00\x02\x10\xfb\x10 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x0e.@\x00\x02\x10\x80\x00\xc4\xc1\x05\x08@\x00\x02\x10\x80\x00\xc4\xd3\xd8%\x90\xb1\x7f\xf2>\x97\xa7\xd5\xfd\xa4-@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\xc4\xfe\x01\x08@\x00b\x00\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\xac:$*\x0e\xad\x8a\xeb\xec0\xcd3\xfc*\x9e\x9d\xd4\xf3\x9e\xfa\xd9\x01\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\xd8P\x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00q\xde\x01\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00$\xf2\xe6t\x1e\x90\xa9\xf7\xa2\xf3@\xaax. \\d^\x18Z\x00\x01\x08@\x00\x02\x10\x80\x00\xc4\xbd\x00\x08@\x00\x02\x10\x80\xb8\x17\x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x88\xa1\x05\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00q/\x00\x02\x10\x80\x00\x04 \xee\x05@\x00\x02\x10\x80\xccx\xe0\xfc\xdch\xad\xc3\x94\xfas\xbe\xa9\xf7+\xf5K\x9c/\x9e\x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01HC@f\xfb\\\x15\xd1\xeb\xbc>\xaa\xf5\xc5!u&\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x02\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x9cw\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x02\x08@\x00\x02\x10\x80\x00\x04 \x001D\xc3\x9e~6\xb0\xf3\xbe\xc8\xa4\xfeE\x04{\x03 \x00\x01\x88\xf5\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80x\x01\x04 \x00\x01\x08@\xbc\xec\r\x80\x00\x04 \x86\x04@\x00\x02\x10\x80\x18\x90\xd6\x07 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\xe2\x05\x900@f\xc3*\x15\xb4\x8a\xf7\xc2:\xd7\x1al\xa9\xeb\xdc\x11\x07\x80\x00\x04 \xd6\x19 \x00\x01\x08@\x0c6\xeb\x0c\x10\x80\x00\x04 \x06\x1b@\x00\x02\x10\x80\x00\xc4`\x03\x08@\x00\x02\x10\x80\x00\x04 \xd6\x19 \x00\x01\x08@\x00b\x9d\x01\x02\x10\x80\x00\xc4`\xb3\xce\x00\x01\x08@\x00b\xb0\x01\x04 \x00\x01H\xf4\xb0\x99\xed0yr\xd7\xbd\xf0W\x012\xe6F\xdc\x17r\x80\x00\x04 \xee\x05@\x04\x10\x80\x00\xc4\xbd\x00\x08@\x00\x02\x10C\x0b \x00\x01\x08@\x00bh\x01\x04 \x00\x01\x08@\x0c-\x80\x00\x04 \x02\x08@\x00\xe2^\x00\x84\x02\x00\x01\x08@\xdc\x0b\x80\x00\x04 \x001\xb4\x00\x02\x10\x80\x00d\xc6\x81=\xdb\x7f\xab\xe4\xa6i\x8c\xb9\xe1\x97\xb77\xecC\x80\x00\xc4\x90\x00\x88\xbd\x01\x10\x80\x00\x04 \x0e.@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10{\x03 \x00\x01\x88!\x01\x10{\x03 \x00\x01\x08@\x1c\\\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x84\r\xb6T\x88*>A._\xac\x92\xd6\xa7\xe5\xfes\x98\x00\x02\x10{\x1e \xf63@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x04\x10\x80\x00\x04 \x00\x11@\x00\x02\x10\x80\x00\x04 \x00\x01\x88\x00\x02\x10\x80\xd8\xf3\x00\xb1\x9f\x01\x02\x10\x80\x00\x04 \x00\x01\x08@\x00"\x80\x00\x04 Uo\xb2\r\xd5\x13\xc6\xd4\xcf\xde\xf1\t\xe9\xca_\xac<\x89\x0e\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x90H@f;\xdc\x9eh\xf7\x13\xa0\xdes\x1f\xac*\x9ew\x80\x00\x04 \x86\r@\xdcS\x80\x00\x04 \x861@\xdcS\x80\x00\x04 \x86\xb1\xf7\x0c\x10\x80\x00\x04 \x00\xf1\x9e\x01\x02\x10\x80\x00\x04 \x86\r@\x00\x02\x10\x80\x00\xc4\xb0\x01\x88{\n\x10\x80\x00\xc40\x06\x88\xf5\x01\x08@\x00\x02\x10\xef\x19 \x00)\x07H\xea\xa6\x9b\xed:~n4o\xd0v^\xe7\xce\xfb\x07 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00)\x07\xc8\xc8A\xdby\x83W\x1cl\x9d\x0f7\xacj\xad\x0f@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x808\xef\x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00bC\x01\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\xa4\xe1\xd0\xea\xbc\x86~^\xd8\xcf\xbav\x83\xba\xe3\xfc\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\xdao\xde\xd4\'\xb6S\x81\x85g\xcf/)\x9d\xcf;@l(\x80\x00\x04 \xce;@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\xd8P\x00\x01\x08@\x9cw\x80\xd8P\x00\x01\x08@\x9cw\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01H\xdb\xc3m y:\xdc>\xf4\xd4\xfbO\xdd\xd3R_\xcc\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x0e\xae\x17@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\xc4\xc1\xf5\x02\x08@\x00\x02\x90\xd1\x80T\xdc\xe0\x9d\xa1\xb6\xce\x86\xbaWm\x88\x00\x02\x10\x80\x00\xc4P\xb6\x9f\x01\x02\x10\x80\x00\x04 \x00\x01\x08@\x00b\x9d\x01\xe2\x05\x10\x80\x00\x04 \x00\xf1\x02\x08@\x0c6\x80\x00\xc4\x0b \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\xc4:\x03\xc4\x0b \n=\xdc\x15\xd7g\xb6{Q\xf1\xfd\xa4\xfedk\xc5\x9f\xbd\x05\x88\x00\x02\x10\x80\x00\x04 \x02\x08@\x00\x02\x10\x80\x08 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x11@\x00\x02\x10\x80\x00D\x00\x01\x08@\x00\x02\x10\x01\x04 \x00\x01\x08@\xca\x01\xe2\x89\xd2\x9e\x1b<u\x9dS\x91I\x85(\xf5,\x03\x04 \x00\x01\x88u\x06\x08@\x00\x02\x10\x83\r \x00\x01\x08@\x00b\xb0\x01\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\xac3@\x00\x02\x10\x80\x00\xc4:\x03\x04 \x00\x01\x88\xc1\x06\x10\x80\x00\x04 \x001\xd8\x00\x02\x10\x80\x94\x03\xa4b\x9d\x87D\xe7\xcf\x95\xfa4\xbf\x9f \xee9\xc7\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80L\xb21=m<f\rS\xdfsg\xac<\x89\x0e\x90\xaf^\xaf\xd7\xb2\xdf\xefW\xdd$\xdb\xedv\xb9\\.\x00\x01\x08@\x00\x02\x90$@\xd6\xc6\xe3\xf7\xebp8,\x8f\xc7\x03 \x00\x01\x08@\x00\xe2\x7f\xf5\xfc\xfd\xeb~\xbf\x03\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\xe2gT\xfdLqQ\x88*\xce\xa8\xb8u\x01\x08@\x00\x02\x10\x03\x12 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \xd6\x07 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@2\x7f\x1e\xb6\xe2\xfbI}j\xb93h\xfe\xba\x00@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\xd4\x06d\xb7\xdb\r\xd9p\xc7\xe3q\xb9\xddn\x00\x01\x08@\x00\x02\x90\x14@\xae\xd7\xebr:\x9dV\xc7\xe3|>/\xef\xf7\xbb\x1c \x9d\xffUYq\xf8U\x1c\xc6\xf0\x04H\xd9a\xf3\xe9\xf9|~\xfd\xef\xa5\xb5^\x9f\x7fy|\x07\x0f\x80\x00\x04 \x00\x01H1@\x12\x87(@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x83\x16 \x00\x01\x08@\x00b\xd0\xfa\\\x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x80\x00\xc4\xa0\x9d\xf2su\x1e\xd8\xb3\xddSx\xe6\x816\xdb\x19\x04H\x83\x8d\t\x10\x80\x00\xc4\x19\x04\x08@l^\x80\x00\xc4\x19\x04\x08@l^\x80\x00\xc49\x05\x08@l^\x80\x00\x04 \x00\x01\x08@\x00\x02\x10\x808\x83\x00\xb11\x01\x02\x10\x808\x83\x00\x01\x88\xcd\x0b\x10\x80\x00\x04 \x00\xb1y\x01\x02\x10\xe7\x14 \x00\xb1y%\t \x92$\x80H\x92\x00"I\x12@$I\x00\x91$\x01D\x92\x04\x10I\x12@$I\x02\x88$\t \x92$\x80H\x92\x00"I\x02\x88$I\x00\x91$\x01D\x92\x04\x10I\x12@$I\x00\x91$\t \x92$\x80H\x92\x00"I\x02\x88$I\x00\x91$\x01D\x92\x04\x10I\x12@$I\x00\x91$\t \x92$\x80H\x92\x00"I\x02\x88$\t \x92$\x01D\x92\xf4\x9f\xfa\x05\x85\'6\x08\xa3\xcb"\xd6\x00\x00\x00\x00IEND\xaeB`\x82'



#监听回调函数，此处为打印消息
def notification_handler(characteristic: BleakGATTCharacteristic, data: bytearray):
    global Receive_buff,IsREC_HEX
    if IsREC_HEX == 1:
        Receive_buff = "".join("%02x" % b for b in data)
    else:
        Receive_buff = data.decode('gbk')
    print("rev data:",data)


# with open(r"联系方式.png", "rb") as f:  # 用 rb 模式（二进制）打开文件
#    image = f.read()
#    print(image)  # 打印一下
# #    # 是一段超级长的字符串串
# #    # b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x16\xd6 ...省略...'


async def Connect():
    global IsBleDevice,send_buff
    IsBleDevice = 1
    print("starting scan...")
    #基于MAC地址查找设备
    device =  await BleakScanner.find_device_by_address(
        par_device_addr, cb=dict(use_bdaddr=False)  #use_bdaddr判断是否是MOC系统
    )
    if device is None:
        print("could not find device with address '%s'", par_device_addr)
        IsBleDevice = 2
    else:
        IsBleDevice = 3
        print('设备存在')






async def GETT():
    global IsBleDevice
    print("starting scan...")
    #基于MAC地址查找设备
    device = await BleakScanner.find_device_by_address(
        par_device_addr, cb=dict(use_bdaddr=False)  #use_bdaddr判断是否是MOC系统
    )
    if device is None:
        print("could not find device with address '%s'", par_device_addr)
        # 获取当前正在运行的Task对象
    #事件定义
    disconnected_event = asyncio.Event()

    #断开连接事件回调，当设备断开连接时，会触发该函数，存在一定延迟
    def disconnected_callback(client):
        print("Disconnected callback called!")
        IsBleDevice = 99
        disconnected_event.set()

    IsBleDevice = 4
    async with BleakClient(device, disconnected_callback=disconnected_callback) as client:
        print("Connected")

        await client.start_notify(par_notification_characteristic, notification_handler)
        while True:
            global send_buff
            global IsSEND_HEX
            global IsSEND_HHF
            if send_buff != '':
                print(send_buff)
                #await client.write_gatt_char(par_write_characteristic, bytes(send_buff))
                if IsSEND_HHF == 1:
                    send_buff = send_buff + '\r\n'
                if IsSEND_HEX == 1:
                    send_buff = bytes.fromhex(send_buff)
                    await client.write_gatt_char(par_write_characteristic, send_buff)
                else:
                    await client.write_gatt_char(par_write_characteristic, send_buff.encode("GBK"))
                send_buff = ''
            await asyncio.sleep(0.01)  # 每休眠1秒发送一次




#textEdit_3  是接收部分
#textEdit_2  是发送部分



class ThreadRUN(QtCore.QThread):
    any_signal = QtCore.pyqtSignal(str)
    global IsBleDevice
    def __init__(self, index=0, parent=None):
        super(ThreadRUN, self).__init__(parent)
        self.index = index
        self.is_running = True

    def run(self):
        global IsBleDevice
        global Receive_buff
        print('Starting thread...', self.index)
        while True:
            time.sleep(0.02)
            if IsBleDevice == 1:
                IsBleDevice = 0
                self.any_signal.emit('!scan')
            if IsBleDevice == 2:
                IsBleDevice = 0
                self.any_signal.emit('!err')
            if IsBleDevice == 3:
                IsBleDevice = 0
                self.any_signal.emit('!ready')
            if IsBleDevice == 4:
                IsBleDevice = 0
                self.any_signal.emit('!Have')
            if IsBleDevice == 99:
                ThreadClass.stop()
                self.any_signal.emit('!None')
            if Receive_buff != '':
                print('get data' + Receive_buff)
                self.any_signal.emit(Receive_buff)
                Receive_buff = ''

    def stop(self):
        self.is_running = False
        print('Stopping thread...', self.index)
        self.terminate()




class ThreadClass(QtCore.QThread):

    def __init__(self, index=0, parent=None):
        super(ThreadClass, self).__init__(parent)
        self.index = index
        self.is_running = True

    def run(self):

        asyncio.run(GETT())


    def stop(self):
        self.is_running = False
        self.terminate()


class PC_software(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(PC_software, self).__init__()

        self.setupUi(self)

        icon = QPixmap()  # 用于绘制图像的类
        icon.loadFromData(image)
        self.label_3.setPixmap(icon)
        self.pushButton_4.clicked.connect(self.Clear_text)
        self.pushButton_5.clicked.connect(self.start_worker_1)
        self.pushButton_3.clicked.connect(self.Try_Send)
        self.pushButton.clicked.connect(self.Scn)
        self.pushButton_2.clicked.connect(self.Change_bps)
        self.checkBox.stateChanged.connect(self.HEX_CK1)
        self.checkBox_2.stateChanged.connect(self.HEX_CK2)
        self.checkBox_3.stateChanged.connect(self.HEX_CK3)
    def HEX_CK1(self, state):
        global IsREC_HEX
        if state == 2:
            print('十六进制接收')
            IsREC_HEX = 1
        if state == 0:
            print('ASCII接收')
            IsREC_HEX = 0
    def HEX_CK2(self, state):
        global IsSEND_HEX
        if state == 2:
            IsSEND_HEX = 1
            print('十六进制发送')
        if state == 0:
            IsSEND_HEX = 0
            print('ASCII发送')

    def HEX_CK3(self, state):
        global IsSEND_HHF
        if state == 2:
            IsSEND_HHF = 1
            print('后置换行符')
        if state == 0:
            IsSEND_HHF = 0
            print('后不置换行符')
    def Clear_text(self):
        self.textEdit_3.clear()
    def Change_bps(self):
        global send_buff
        send_buff ='##'+ self.textEdit.toPlainText()
    def Scn(self):
        asyncio.run(Connect())
        self.thread2 = ThreadRUN(parent=None, index=2)
        self.thread2.start()
        self.thread2.any_signal.connect(self.ttfunction)

    def Try_Send(self):
        global send_buff
        send_buff = self.textEdit_2.toPlainText()

    def start_worker_1(self):
        self.thread = ThreadClass(parent=None, index=1)
        self.thread.start()

    def stop_worker_1(self):
        self.thread.stop()


    def stop_worker_2(self):
        self.thread2.stop()

    def ttfunction(self, counter):
        global IsREC_HEX
        if counter == '!scan':
            self.label_2.setText("正在扫描")
            return
        if counter == '!ready':
            self.label_2.setText("可以连接")
            return
        if counter == '!err':
            self.label_2.setText("设备不存在")
            return
        if counter == '!Have':
            self.label_2.setText("已连接")
            return
        if counter == '!None':
            self.label_2.setText("已断开")
            return
        self.textEdit_3.insertPlainText(counter)
        print(counter)




if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    myshow = PC_software()
    myshow.show()
    sys.exit(app.exec_())


